#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>

int main(int argc, char *argv[])
{
	int i;
	pid_t pid, wpid, temppid;

	for (i =0; i < 5; i++){
		pid = fork();
		if (pid == 0){ // 循环期间，子进程不fork
			break;
		}
		if (2 == i){
			 temppid = pid;
			printf("--------pid = %d\n", temppid);
		}
	}
	if (5 == i){  // 父进程，从表达式2跳出
	 	// sleep(5);
		// wait(NULL);   // 一次wait/waitpid函数调用，只能回收一个子进程。
		// wpid = waitpid(-1, NULL, WNOHANG);  // 回收任意子进程，没有结束的子进程，父进程直接返回0。
		// wpid = waitpid(pid, NULL, WNOHANG);  // 指定一个进程回收。
		printf("回收的PID： %d\n", temppid);
		// wpid = waitpid(temppid, NULL, WNOHANG);  // 指定一个进程回收，不阻塞。
		wpid = waitpid(temppid, NULL, 0);  // 指定一个进程回收，阻塞。
		if (-1 == wpid) {
			perror("waitpid error");
			exit(1);
		}
		printf("I'm parent, wait a child finish: %d \n", wpid);
	}else {
		sleep(i);
		printf("I'm %dth child, pid = %d \n", i+1, getpid());
	}
	return 0;
}
